package com.jzlin.funhub.admin.service.file.strategy;

import com.jzlin.funhub.admin.common.enums.FileStorageStrategyEnum;
import com.jzlin.funhub.admin.model.dto.FileUploadResultDTO;
import com.jzlin.funhub.framework.core.exception.FileStorageException;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.InputStream;

/**
 * 文件存储策略接口.
 *
 * @author linjz
 * @since 2025/8/8
 */
public interface IFileStorageStrategy {
    /**
     * 上传文件
     * @param file 文件对象
     * @param descPath 目标文件路径
     * @return 文件id
     */
    FileUploadResultDTO upload(File file, String descPath) throws FileStorageException;

    FileUploadResultDTO upload(MultipartFile file, String descPath) throws FileStorageException;

    /**
     * 下载文件
     * @param path 文件路径
     * @return 文件输入流
     */
    InputStream download(String path) throws FileStorageException;

    /**
     * 删除文件
     * @param path 文件路径
     */
    void delete(String path) throws FileStorageException;

    /**
     * 文件存储策略枚举
     * @return
     */
    FileStorageStrategyEnum getStrategy();
}
